﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DAL;
using BLL;
using NLog;
using DevExpress.XtraReports.UI;

namespace QLTTTH
{
    public partial class UCThoiKhoaBieu : UserControl
    {

        protected static Logger logger = LogManager.GetCurrentClassLogger();
        private void Log(ActionResult aResult)
        {
            foreach (var ex in aResult.Exceptions)
            {
                logger.Error(ex);
            }
        }

        public UCThoiKhoaBieu()
        {
            InitializeComponent();
        }

        private void btnXemTKB_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            logger.Info("Thực hiện chức năng xem chi tiết thời khóa biểu");
            frmThongTinTKB frm = new frmThongTinTKB();
            frm.ThietLapThongTin(THoiKhoaBieu_Grv());
            frm.btnLuu.Enabled = false;
            frm.btnXoas.Enabled = false;
            frm.ShowDialog();
        }

        private void LoadThoiKhoaBieu()
        {
            var aResult = ThoiKhoaBieuManager.GetThoiKhoaBieu();
            if (aResult.Success)
                grDanhSachTKB.DataSource = aResult.Result;
        }

        private void grDanhSachTKB_Load(object sender, EventArgs e)
        {
            LoadThoiKhoaBieu();
            grvThoiKhoaBieu.OptionsSelection.MultiSelect = true;
        }

        private ThoiKhoaBieu THoiKhoaBieu_Grv()
        {
            ThoiKhoaBieu tkb = new ThoiKhoaBieu();
            tkb.MaTKB = int.Parse(grvThoiKhoaBieu.GetFocusedRowCellValue("MaTKB").ToString());
            tkb.MaPhong = int.Parse(grvThoiKhoaBieu.GetFocusedRowCellValue("MaPhong").ToString());
            tkb.MaLop = int.Parse(grvThoiKhoaBieu.GetFocusedRowCellValue("MaLop").ToString());
            tkb.NgayHoc = DateTime.Parse(grvThoiKhoaBieu.GetFocusedRowCellValue("NgayHoc").ToString());
            tkb.BuoiHoc = grvThoiKhoaBieu.GetFocusedRowCellValue("BuoiHoc").ToString();
            return tkb;
        }

        private void btnTimTKB_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            logger.Info("Thực hiện tìm kiếm thời khóa biểu");
            grvThoiKhoaBieu.ShowFindPanel();
        }

        private void btnXoaTKB_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            logger.Info("Thực hiện chọn chức năng xóa thời khóa biểu");
            if (XtraMessageBox.Show("Bạn có muốn thời khóa biểu học này", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                int maTKB;

                for (int i = 0; i < grvThoiKhoaBieu.RowCount; i++)
                {
                    if (grvThoiKhoaBieu.IsRowSelected(i))
                    {
                        maTKB = int.Parse(grvThoiKhoaBieu.GetRowCellDisplayText(i, "MaTKB").ToString());
                        var tkb = ThoiKhoaBieuManager.XoaThoiKhoaBieu(maTKB);
                        if (!tkb.Success)
                        {
                            Log(tkb);
                            XtraMessageBox.Show("Xóa thời khóa biểu không thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                    }
                }

                grvThoiKhoaBieu.DeleteSelectedRows();
                XtraMessageBox.Show("Xóa thời khóa biểu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnThemTKB_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            logger.Info("Thực hiện chức năng thêm thời khóa biểu");
            frmThongTinTKB frm = new frmThongTinTKB();
            frm.sendData = new frmThongTinTKB.SendData(ThemThoiKhoaBieu);
            frm.ShowDialog();
        }

        private void ThemThoiKhoaBieu(ThoiKhoaBieu tkb)
        {
            var aResult = ThoiKhoaBieuManager.ThemThoiKhoaBieu(tkb);
            if (aResult.Success)
            {
                LoadThoiKhoaBieu();
                XtraMessageBox.Show("Thêm thời khóa biểu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                Log(aResult);
                XtraMessageBox.Show("Thêm thời khóa biểu không thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCapNhatTKB_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            logger.Info("Thực hiện chức năng cập nhật thời khóa biểu");
            frmThongTinTKB frm = new frmThongTinTKB();
            frm.ThietLapThongTin(THoiKhoaBieu_Grv());
            frm.sendData = new frmThongTinTKB.SendData(CapNhatThoiKhoaBieu);
            frm.btnXoas.Enabled = false;
            frm.ShowDialog();
        }

        private void CapNhatThoiKhoaBieu(ThoiKhoaBieu tkb)
        {
            var aResult = ThoiKhoaBieuManager.CapNhatThoiKhoaBieu(tkb);
            if (aResult.Success)
            {
                grvThoiKhoaBieu.SetFocusedRowCellValue("MaPhong", tkb.MaPhong);
                grvThoiKhoaBieu.SetFocusedRowCellValue("MaLop", tkb.MaLop);
                grvThoiKhoaBieu.SetFocusedRowCellValue("NgayHoc", tkb.NgayHoc);
                grvThoiKhoaBieu.SetFocusedRowCellValue("BuoiHoc", tkb.BuoiHoc);
                XtraMessageBox.Show("Cập nhật thời khóa biểu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                Log(aResult);
                XtraMessageBox.Show("Cập nhật thời khóa biểu không thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnXemTruoc_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            rptThoiKhoaBieu rpt = new rptThoiKhoaBieu();
            QLTTTHEntities content = new QLTTTHEntities();
            List<ThoiKhoaBieu> tkb = content.ThoiKhoaBieux.ToList();
            rpt.DataSource = tkb;
            ReportPrintTool tool = new ReportPrintTool(rpt);
            tool.ShowPreview();
        }

        private void btnEdit_Print_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            rptThoiKhoaBieu rpt = new rptThoiKhoaBieu();
            ReportDesignTool tool = new ReportDesignTool(rpt);
            tool.ShowDesignerDialog();
        }

        private void btnPrint_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            rptThoiKhoaBieu rpt = new rptThoiKhoaBieu();
            ReportPrintTool tool = new ReportPrintTool(rpt);
            tool.Print();
        }

    }
}
